
package uniriotec.dsw.tickets.controle;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import uniriotec.dsw.tickets.modelo.Perfil;
import uniriotec.dsw.tickets.modelo.Usuario;
import uniriotec.dsw.tickets.modelo.UsuarioFinal;
import uniriotec.dsw.tickets.servicos.impl.UsuarioService;
import uniriotec.dsw.tickets.servicos.interfaces.IUsuarioService;
import uniriotec.dsw.tickets.servicos.util.ServiceUtil;


@ManagedBean(name="usuarioBean")
@RequestScoped
public class UsuarioBean extends BaseBean{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Usuario    usuario=new UsuarioFinal();
	private String	       confirmarSenha;
	private List<Usuario>	lista;
	private String	       destinoSalvar;
	private String	       permissao;
	private boolean editMode;
	private IUsuarioService usuarioService = ServiceUtil.getServiceFactory().getUsuarioService();
	
	
	public String novo() {
		this.destinoSalvar = "usuarioSucesso";
		this.usuario = new UsuarioFinal();
		
		/*this.usuario.setAcessos(null);*/
		this.usuario.setAtivo(true);
		return "usuario";
	}
	public void cancel(){
		this.editMode = false;
		//filtroIdfClube = null;
		lista = ServiceUtil.getServiceFactory().getUsuarioService().retrieve();
	}
	public void alterar(){
		
		this.editMode = true;
	}
    public void listar(){
		
		this.editMode = false;
	}
	public Perfil[] getPerfis() {
		return Perfil.values();
	}
	
	
	
	public String editar() {
		this.confirmarSenha = this.usuario.getSenha();
		return "/publico/usuario";
	}

	public String salvar() {
	
		//String senha = this.usuario.getSenha();
		if (this.usuario.isNovo())
		{		
		  if (!this.usuario.getSenha().equals(this.confirmarSenha))
		  {
			 this.addErrorMessage("A senha não foi confirmada corretamente");
			  return null;
		  }

		if (!this.usuario.isAtivo()){
			this.usuario.setAtivo(true);
			}
		  usuarioService.create(this.usuario);
		  
		  
		/*
		//Envia email ap�s o cadastramento de um usu�rio novo
		try {
	  		usuarioSvc.enviarEmailPosCadastramento(this.usuario);
			} catch (ServiceException e) {
			this.addErrorMessage("N�o foi poss�vel enviar o e-mail de cadastro do usu�rio. Erro: " + e.getMessage()");
			  return null;
			}
			} 
	*/
		  
		}
		else
		{
           usuarioService.update(usuario);
		   addInfoMessage("Usuário alterado com sucesso");
		
		}
		return this.destinoSalvar;
	}

	public String excluir() {
		
		usuarioService.delete(this.usuario);
		this.lista =  usuarioService.retrieve();
		return null;
	}

	public String ativar() {
		if (this.usuario.isAtivo())
			this.usuario.setAtivo(false);
		else
			this.usuario.setAtivo(true);

		UsuarioService usuarioSvc = new UsuarioService();
		usuarioSvc.update(this.usuario);
		return null;
	}

	public String alteraPerfil(Usuario usuario, Perfil perfil) {

		this.usuario = usuario;
        this.usuario.setPerfil(perfil);
		return null;
	}

	public List<Usuario> getLista() {
		this.editMode = false;
		if (this.lista == null) {
			UsuarioService usuarioSvc = new UsuarioService();
			this.lista = usuarioSvc.retrieve();
		}
		return this.lista;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getConfirmarSenha() {
		return confirmarSenha;
	}

	public void setConfirmarSenha(String confirmarSenha) {
		this.confirmarSenha = confirmarSenha;
	}

	public String getDestinoSalvar() {
		return destinoSalvar;
	}

	public void setDestinoSalvar(String destinoSalvar) {
		this.destinoSalvar = destinoSalvar;
	}

	public String getPermissao() {
		return permissao;
	}

	public void setPermissao(String permissao) {
		this.permissao = permissao;
	}

	public boolean isEditMode() {
		return editMode;
	}

	public void setEditMode(boolean editMode) {
		this.editMode = editMode;
	}

	}
